import fitz  # PyMuPDF
'''
提供了三个处理函数
1.将PDF全部页面转换为图片：pdf_to_images(pdf_path, output_folder)
2.指定PDF页数转换为图片：pdf_to_images_multiple(pdf_path,output_folder,*args)
3.指定PDF页数范围转换为图片：pdf_to_images_range(pdf_path,output_folder,start_page,end_page)
'''

# 1.将pdf文件所有的页面转换为图片 pdf_path为pdf文件路径，output_folder为输出文件夹路径(此文件夹需要提前创建)
def pdf_to_images(pdf_path, output_folder):
    # 打开PDF文件
    pdf_document = fitz.open(pdf_path)
    for page_num in range(len(pdf_document)):
        # 获取单个页面
        page = pdf_document.load_page(page_num)
        # 将页面转换为Pixmap对象
        pix = page.get_pixmap()
        # 定义输出图片的路径
        output_path = f"./{output_folder}/page_{page_num + 1}.png"
        # 保存Pixmap到文件
        pix.save(output_path)
    print(f"已将{len(pdf_document)}页PDF转换为图片")


# 2.可选页数指定输出
#例：pdf_to_images_multiple("./xxx.pdf","./output_images",1,2,3)
def pdf_to_images_multiple(pdf_path,output_folder,*args):
    # 打开PDF文件
    pdf_document = fitz.open(pdf_path)
    # 遍历输入的界面
    for page_num in args:
        page_num = page_num - 1
        if page_num < 0:
            print('页数不能小于1')
            return
        if page_num > len(pdf_document):
            print('页数不能大于PDF总页数')
            return

        # 获取单个页面
        page = pdf_document.load_page(page_num)
        # 将页面转换为Pixmap对象
        pix = page.get_pixmap()
        # 定义输出图片的路径
        output_path = f"./{output_folder}/page_{page_num + 1}.png"
        # 保存Pixmap到文件
        pix.save(output_path)
        print(f"已将{page_num+1}页PDF转换为图片")

# 3.指定页数范围输出
#例：pdf_to_images_multiple("./xxx.pdf","./output_images",1,20)
def pdf_to_images_range(pdf_path,output_folder,start_page,end_page):
    # 打开PDF文件
    pdf_document = fitz.open(pdf_path)
    # 遍历输入的界面
    for page_num in range(start_page,end_page+1):
        page_num = page_num - 1
        if page_num < 0:
            print('页数不能小于1')
            return
        if page_num > len(pdf_document):
            print('页数不能大于PDF总页数')
            return

        # 获取单个页面
        page = pdf_document.load_page(page_num)
        # 将页面转换为Pixmap对象
        pix = page.get_pixmap()
        # 定义输出图片的路径
        output_path = f"./{output_folder}/page_{page_num + 1}.png"
        # 保存Pixmap到文件
        pix.save(output_path)
        print(f"已将{page_num+1}页PDF转换为图片")

#如果运行的主脚本是此文件，那么就执行以下代码
if __name__ == '__main__':
    print('你运行的是pdf转图片脚本')
    #转换全部图片
    pdf_to_images("./开工类.pdf", "output_images")

    #指定页数转换
    #pdf_to_images_multiple("C:\\Users\\sdxf\\Desktop\\项目服务日志及考勤类.pdf", "./output_images",5,6,8,7)

    #指定范围
    #pdf_to_images_range("C:\\Users\\sdxf\\Desktop\\项目服务日志及考勤类.pdf", "./output_images",1,12)
